package com.dys.testjdk11;

import java.util.Optional;
import java.util.stream.Stream;

/**
 * @className: com.dys.testjdk11.OptionalAPI
 * @description: Optional新增方法
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/04 下午11:15
 */
public class OptionalAPI {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        Optional<String> optional = Optional.empty();
        // JDK8 判断value是否存在
        System.out.println(optional.isPresent());
        // JDK11 判断value是否为空
        System.out.println(optional.isEmpty());

        // JDK10 返回value,如果为null则直接抛出 NoSuchElementException
        Optional<String> optional2 = Optional.of("元素");
        // Optional<String> optional2 = Optional.empty();
        String value = optional2.orElseThrow();
        System.out.println(value);

        // JDK9  value非空,执行参数1功能,如果value为空,执行参数2功能
        // Optional<String> optional3 = Optional.empty();
        Optional<String> optional3 = Optional.of("值1");
        optional3.ifPresentOrElse((v) -> System.out.println("value值为：" + v), () -> System.out.println("value值为null"));

        // JDK9 value非空,返回对应的Optional,value为空,返回形参封装的Optional
        // Optional<String> optional4 = Optional.empty();
        Optional<String> optional4 = Optional.of("有值");
        Optional<String> optional5 = optional4.or(() -> Optional.of("值2"));
        System.out.println(optional5);

        // JDK9 value非空,返回一个仅包含此value的Steam,否则,返回一个空的Stream
        // Optional<String> optional6 = Optional.of("值3");
        Optional<String> optional6 = Optional.empty();
        Stream<String> stream = optional6.stream();
        stream.forEach(System.out::println);
    }
}
